package multiplex.facade;
import java.util.List;
import multiplex.model.*;

public interface IFacade {
    List<Filme> getFilmesExibicao(); //retorna lista de Filmes em exibi��o em ordem alfab�tica com estr�ias primeiro
    List<Localizacao> getLocalizacaoFilme(Filme oFilme);//retorna lista de localiza��es que exibem o Filme
    List<Sessao> getSessaoFilme(Filme oFilme); //retorna lista de sessoes do filma para os pr�ximos 4 dias
    Usuario autenticaUsuario(String email, String senha); //retorna o usuario do login e senha passados, null caso o usuario n�o esteja cadastrado
    boolean cadUsuario (Usuario oUsuario); //cadastra o usu�rio na base, retorna 0 caso ocorra erro e 1 caso seja bem sucedido
    int cadCompraMarcada(CompraMarcada oCompra, Sessao oSessao);//verifica a disponibilidade de assentos e cadastra a compra na Base, retorna 0 caso n�o haja assento, -1 caso haja erro no cart�o de cr�dito e 1 caso seja bem sucedido
    int cadCompraNaoMarcada(CompraNaoMarcada oCompra, Sessao oSessao);//verifica a disponibilidade de assentos e cadastra a compra na Base, retorna 0 caso n�o haja acento, -1 caso haja erro no cart�o de credito e 1 caso seja bem sucedido
    List<Filme> getFilmesExibeLocalizacao(Localizacao olocalizacao);//
    List<Filme> getFilmesEmBreve();//retorna lista de Filmes que entrar�o em exibi��o na rede multiplex
    List<Promocao> getPromocoes();//retorna lista de promocoes
    boolean cadFilme(Filme oFilme);//cadastra ou atualiza Filme
    void alteraFilme(Filme oFilme);//altera filme
    void removeFilme(Filme oFilme);//remove filme
    boolean cadLocalizacao(Localizacao olocalizacao);//cadastra ou atualiza localizacao
    void alteraLocalizacao(Localizacao oLocalizacao);//altera localiza��o
    void removeLocalizacao(Localizacao oLocalizacao);//remove localiza��o
    boolean cadSala(Sala osala);//cadastra ou atualiza sala
    void alteraSala(Sala oSala);//altera sala
    void removeSala(Sala oSala);//remove sala
    boolean cadPromocaoDeFilme(PromocaoFilme oPromocao);//cadastra ou atualiza Filme
    boolean cadPromocaoDeLocalizacao(PromocaoLocalizacao oPromocao);//cadastra ou atualiza Filme
    boolean cadPromocaoDeMeioDePagamento(PromocaoMeioPagamento oPromocao);//cadastra ou atualiza Filme
    List<Filme> getFilme(String nome);//busca Filme na base
    List<Localizacao> getLocalizacao(String nome);//busca Filme na base
    List<Sala> getSala(Localizacao oLocalizacao);//busca Filme na base
    List<Promocao> getPromocao(String nome);//busca Filme na base
    List<Filme> getDestaques();// busca Filmes em destaque
    List<Filme> getNaoDestaques();// busca Filmes em destaque
    boolean cadDestaque(List<Filme> oDestaque);//altera atributo destaque de todos os Filmes de modo a setar como 1 os presentes na lista
    List<Sala> getSalas();//busca lista de salas
    Preco getPreco();
	void updatePreco(Preco preco);
    void updatePrecoSemana(double PrecoSemana);
	void updatePrecoFimdeSemana( double PrecoFimdesemana);
	Filme getFilmeById(int id);
	boolean removePromocaoFilme(Filme oFilme);
	List<PromocaoFilme> getPromocaoByFilme(Filme oFilme);
	List<Sala> getSalaByFilmeCidade(Filme oFilme, String cidade);
	List<Localizacao> getAllLocalizacao();
	List<String> getCidadeByFilme(Filme oFilme);
	List<Sessao> getSessao4DiasBySala(Sala oSala);
	Sessao getSessaoById(int sessaoId);
	boolean alteraPromocaoFilme(PromocaoFilme oPromocao);
}
